/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager.visualizar;

import br.com.deployment.entidade.protocolo.*;
import br.com.deployment.manager.consultar.ManagerConsultarProtocolo;
import br.com.deployment.servico.LancamentoServico;
import br.com.deployment.servico.ProtocoloServico;
import java.io.IOException;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

/**
 *
 * @author luciano
 */
@ManagedBean
@SessionScoped
public class ManagerVisaoLancamento implements Serializable {
    
    @EJB
    LancamentoServico lancamentoServico;
    @EJB
    ProtocoloServico protocoloServico;
    
    
    Pagamento pagamento;
    Lancamento lancamento;
    
    Protocolo protocolo;
    
    BigDecimal totalCartorio;
    BigDecimal totalFermojupi;
    BigDecimal valorTotalProtocolo;
    BigDecimal valorTotalPagamento;
    
    int qtdeProtocolos;
    int qtdePagamentos;
    int qtdeSelos;
    
    BigDecimal totalCredito;
    BigDecimal totalDebito;
    BigDecimal totalReceber;
    BigDecimal totalReceita;
    
    @PostConstruct
    public void init(){
        totalCartorio = new BigDecimal(0);
        totalFermojupi = new BigDecimal(0);
        valorTotalProtocolo = new BigDecimal(0);
        valorTotalPagamento = new BigDecimal(0);
        totalCredito = new BigDecimal(0);
        totalDebito = new BigDecimal(0);
        totalReceber = new BigDecimal(0);
        totalReceita = new BigDecimal(0);
    }
    
    public List<Lancamento> todos(){
       return lancamentoServico.findAll();
    }
       public void redirect(Lancamento lancamento) {
        try {
            FacesContext context = FacesContext.getCurrentInstance();
            context.getExternalContext().redirect("visualizarLancamento.xhtml");
            this.lancamento = lancamento;
            preencheValores(lancamento);
        } catch (IOException ex) {
            Logger.getLogger(ManagerConsultarProtocolo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void preencheValores(Lancamento lancamento){
                lancamento.setProtocolos(lancamentoServico.findProtocolos(lancamento));
        lancamento.setPagamentos(lancamentoServico.findPagamentos(lancamento));

        totalCartorio = calculaTotalCartorio(lancamento.getProtocolos());
        totalFermojupi = calculaTotalFermojupi(lancamento.getProtocolos());
        valorTotalProtocolo = totalCartorio.add(totalFermojupi);
        valorTotalPagamento = calculaTotalPagamentos(lancamento.getPagamentos());
        
        for (Protocolo p : lancamento.getProtocolos()) {
            List<ServicoProtocolo> lstSelos = protocoloServico.servicoProtocolos(p);
            for (ServicoProtocolo servicoProtocolo : lstSelos) {
                qtdeSelos += servicoProtocolo.getSelos() != null ? servicoProtocolo.getSelos().size() : 0;
            }
        }

        qtdeProtocolos = lancamento.getProtocolos() != null ? lancamento.getProtocolos().size() : 0;
        qtdePagamentos = lancamento.getPagamentos() != null ? lancamento.getPagamentos().size() : 0;

        totalCredito = lancamentoServico.totalPago(lancamento.getDataLanc());
        totalDebito = valorTotalPagamento;
        totalReceber = lancamentoServico.totalAreceber(lancamento.getDataLanc());
        totalReceita = totalCredito.subtract(totalDebito);

    }
       
       
    public Lancamento getLancamento() {
        return lancamento;
    }

    public void setLancamento(Lancamento lancamento) {
        this.lancamento = lancamento;
    }

    public Protocolo getProtocolo() {
        return protocolo;
    }

    public void setProtocolo(Protocolo protocolo) {
        this.protocolo = protocolo;
        this.protocolo.setServicoProtocolos(protocoloServico.servicoProtocolos(protocolo));
    }

    public BigDecimal getTotalCartorio() {
        return totalCartorio;
    }

    public void setTotalCartorio(BigDecimal totalCartorio) {
        this.totalCartorio = totalCartorio;
    }

    public BigDecimal getTotalFermojupi() {
        return totalFermojupi;
    }

    public void setTotalFermojupi(BigDecimal totalFermojupi) {
        this.totalFermojupi = totalFermojupi;
    }

    public BigDecimal getValorTotalProtocolo() {
        return valorTotalProtocolo;
    }

    public void setValorTotalProtocolo(BigDecimal valorTotalProtocolo) {
        this.valorTotalProtocolo = valorTotalProtocolo;
    }

    public Pagamento getPagamento() {
        return pagamento;
    }

    public void setPagamento(Pagamento pagamento) {
        this.pagamento = pagamento;
    }

    public BigDecimal getValorTotalPagamento() {
        return valorTotalPagamento;
    }

    public void setValorTotalPagamento(BigDecimal valorTotalPagamento) {
        this.valorTotalPagamento = valorTotalPagamento;
    }

    public int getQtdePagamentos() {
        return qtdePagamentos;
    }

    public void setQtdePagamentos(int qtdePagamentos) {
        this.qtdePagamentos = qtdePagamentos;
    }

    public int getQtdeProtocolos() {
        return qtdeProtocolos;
    }

    public void setQtdeProtocolos(int qtdeProtocolos) {
        this.qtdeProtocolos = qtdeProtocolos;
    }

    public int getQtdeSelos() {
        return qtdeSelos;
    }

    public void setQtdeSelos(int qtdeSelos) {
        this.qtdeSelos = qtdeSelos;
    }

    public BigDecimal getTotalCredito() {
        return totalCredito;
    }

    public void setTotalCredito(BigDecimal totalCredito) {
        this.totalCredito = totalCredito;
    }

    public BigDecimal getTotalDebito() {
        return totalDebito;
    }

    public void setTotalDebito(BigDecimal totalDebito) {
        this.totalDebito = totalDebito;
    }

    public BigDecimal getTotalReceber() {
        return totalReceber;
    }

    public void setTotalReceber(BigDecimal totalReceber) {
        this.totalReceber = totalReceber;
    }

    public BigDecimal getTotalReceita() {
        return totalReceita;
    }

    public void setTotalReceita(BigDecimal totalReceita) {
        this.totalReceita = totalReceita;
    }
    
        public BigDecimal calculaTotalCartorio(List<Protocolo> protocolos) {
        BigDecimal result = new BigDecimal(0);
        for (Protocolo p : protocolos) {
            result = result.add(p.getValorTotalCartorio());
        }
        return result;
    }

    public BigDecimal calculaTotalFermojupi(List<Protocolo> protocolos) {
        BigDecimal result = new BigDecimal(0);
        for (Protocolo p : protocolos) {
            result = result.add(p.getValorTotalFermojupi());
        }
        return result;
    }
     public BigDecimal calculaTotalPagamentos(List<Pagamento> pagamentos) {
        BigDecimal result = new BigDecimal(0);
        for (Pagamento p : pagamentos) {
            result = result.add(p.getValor());
        }
        return result;
    }


 
    
    
    
       
       
}
